import axios from 'axios';
import { message } from 'ant-design-vue';
import {  inject } from 'vue';
// 创建axios实例
const service = axios.create({
  baseURL: import.meta.env.VITE_BASE_URL, // 使用环境变量
  timeout: 10000
});

// 请求拦截器
service.interceptors.request.use(
  config => {
    // 从localStorage获取token
    const token = localStorage.getItem('satoken');
    const tokenName = localStorage.getItem('tokenName') || 'token'; // 默认使用'token'
    
    if (token) {
      // 使用后端返回的tokenName作为请求头名称
      config.headers[tokenName] = token;
      
      // 同时也添加标准的Authorization头
      config.headers['Authorization'] = `Bearer ${token}`;
      
      // 为了兼容性，也添加satoken头
      config.headers['satoken'] = token;
    }
    return config;
  },
  error => {
    console.error('请求错误:', error);
    return Promise.reject(error);
  }
);

// 响应拦截器
service.interceptors.response.use(
  response => {
    // 检查多种可能的响应头名称
    const newToken = response.headers['token'] || 
                     response.headers['satoken'] || 
                     response.headers['authorization'] || 
                     response.headers['Authorization'];
    
    if (newToken) {
      const tokenValue = newToken.startsWith('Bearer ') 
        ? newToken.substring(7) 
        : newToken;
        
      localStorage.setItem('satoken', tokenValue);
    }
    
    return response.data;
  },
  error => {
    console.error('响应错误:', error);
    
    if (error.response && error.response.status === 401) {
      localStorage.removeItem('satoken');
      localStorage.removeItem('tokenName');
      localStorage.removeItem('userInfo');
      
      message.error('登录已过期，请重新登录');
      
      setTimeout(() => {
        inject('showLoginModal')
      }, 200);
    } else {
      message.error(error.message || '网络错误');
    }
    
    return Promise.reject(error);
  }
);

export default service; 